% Ejercicio "DBASE3 a SQL"
\subsection*{\fbox{\theejercicio} - DBASE3 a SQL}

Se desea construir mediante LEX y YACC un traductor (simplificado) del lenguaje de bases de datos DBASE III a SQL. En concreto se desean traducir las sentencias de consulta. En DDBASE III para realizar una consulta es necesario primero crear una conexi\'on con la tabla que se desea consultar mediante la instrucci\'on {\tt USE} y a continuaci\'on mostrar la lista de campos con la instrucci\'on DISPLAY. Para realizar una nueva consulta a la misma tabla, no es necesario volver a conectar con ella, pero si es necesario si la consulta se hace para otra tabla. Por ejemplo, el lenguaje que se quiere analizar tiene como entradas v\'alidas las siguientes sentencia:

\begin{verbatim}
USE PELICULAS
DISPLAY FECHA, TITULO, DIRECTOR FOR PAIS = 'Spain'
DISPLAY TITULO FOR FECHA > 1990 .AND. FECHA < 2000
USE ACTORES
DISPLAY NOMBRE, APELLIDOS
USE DIRECTORES
DISPLAY NOMBRE, APELLIDOS FOR PAIS = 'Spain'
\end{verbatim}

Este c\'odigo debe dar origen al siguiente c\'odigo en SQL:

\begin{verbatim}
SELECT FECHA, TITULO, DIRECTOR FROM PELICULAS WHERE PAIS = 'Spain' ;
SELECT TITULO FROM PELICULAS WHERE ( FECHA > 1990 AND FECHA < 2000 );
SELECT NOMBRE, APELLIDOS FROM ACTORES ;
SELECT NOMBRE, APELLIDOS FROM DIRECTORES WHERE PAIS = 'Spain' ;
\end{verbatim}

Los nombres de los campos y de las tablas se forman mediante letras (may\'usculas o min\'usculas) y n\'umeros, pero siempre comenzando por una letra. Las palabras reservadas se escriben indistintamente en may\'usculas o min\'usculas, (aunque en los ejemplos aparecen siempre en may\'usculas) Para simplificar suponemos que solo existen campos de tipo entero o de tipo texto, escribiendo en el primer caso las constantes n\'umericas como una secuencia de d\'{\i}gitos, que no comienza por cero, y en el segundo como cualquier cadena de caracteres delimitada por comillas simples. Para escribir las propias comillas simples u otros caracteres especiales dentro de una constante se usa la barra de escape. Por ejemplo:

\begin{center}
\verb@'Esto es un \'ejemplo'\'@
\end{center}

Se supone que las cadenas de texto se escriben igualmente en DBASE III y en SQL.

\smallskip

Solo se consideran los operadores de comparaci\'on mayor, menor e igual, que pueden ser aplicados tanto a campos num\'ericos como a campos de texto. Se consideran asimismo los operadores booleanos de conjunci\'on y disyunci\'on y negaci\'on que en DBASE III se escriben mediante los s\'{\i}mbolos ( {\tt.AND.} , {\tt .OR.} y ,  {\tt .NOT.} )  respectivamente, y en SQL se traducen por ({\tt AND}, {\tt OR} y {\tt NOT}). La prioridad de operaci\'on y asociatividad es la habitual, pero en el c\'odigo generado en SQL deben a\~nadirse siempre par\'entesis para forzar la misma interpretaci\'on, aunque no los haya en las sentencias DBASE III.

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

